--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
RNS/Utilities/rnsh/session.py ec8d43a548017de41cdf73e7e3eb9844a5d349cd (ec8d43a5) Text, 19.66 KB
T8b949e# Based on the original rnsh program by Aaron Heise (@acehoss)
T8b949e# https://github.com/acehoss/rnsh - MIT License - Copyright (c) 2023 Aaron Heise
T8b949e# This version of rnsh is included in RNS under the Reticulum License
T8b949e#
T8b949e# Reticulum License
T8b949e#
T8b949e# Copyright (c) 2016-2026 Mark Qvist
T8b949e#
T8b949e# Permission is hereby granted, free of charge, to any person obtaining a copy
T8b949e# of this software and associated documentation files (the "Software"), to deal
T8b949e# in the Software without restriction, including without limitation the rights
T8b949e# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
T8b949e# copies of the Software, and to permit persons to whom the Software is
T8b949e# furnished to do so, subject to the following conditions:
T8b949e#
T8b949e# - The Software shall not be used in any kind of system which includes amongst
T8b949e# its functions the ability to purposefully do harm to human beings.
T8b949e#
T8b949e# - The Software shall not be used, directly or indirectly, in the creation of
T8b949e# an artificial intelligence, machine learning or language model training
T8b949e# dataset, including but not limited to any use that contributes to the
T8b949e# training or development of such a model or algorithm.
T8b949e#
T8b949e# - The above copyright notice and this permission notice shall be included in
T8b949e# all copies or substantial portions of the Software.
T8b949e#
T8b949e# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
T8b949e# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
T8b949e# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
T8b949e# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
T8b949e# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
T8b949e# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
T8b949e# SOFTWARE.
Tff7b72from T7ee787__future__ Tff7b72import Te6edf3annotations
Tff7b72import T7ee787contextlib
Tff7b72import T7ee787functools
Tff7b72import T7ee787asyncio
Tff7b72import T7ee787RNST7ee787.T7ee787UtilitiesT7ee787.T7ee787rnshT7ee787.T7ee787exception Tff7b72as T7ee787exception
Tff7b72import T7ee787RNST7ee787.T7ee787UtilitiesT7ee787.T7ee787rnshT7ee787.T7ee787process Tff7b72as T7ee787process
Tff7b72import T7ee787RNST7ee787.T7ee787UtilitiesT7ee787.T7ee787rnshT7ee787.T7ee787helpers Tff7b72as T7ee787helpers
Tff7b72import T7ee787RNST7ee787.T7ee787UtilitiesT7ee787.T7ee787rnshT7ee787.T7ee787protocol Tff7b72as T7ee787protocol
Tff7b72import T7ee787enum
Tff7b72from T7ee787typing Tff7b72import Te6edf3TypeVarTb4b4b4, Te6edf3GenericTb4b4b4, Te6edf3CallableTb4b4b4, Te6edf3List
Tff7b72from T7ee787abc Tff7b72import Te6edf3abstractmethodTb4b4b4, Te6edf3ABC
Tff7b72from T7ee787multiprocessing Tff7b72import Te6edf3Manager
Tff7b72import T7ee787os
Tff7b72import T7ee787bz2
Tff7b72import T7ee787RNS
Te6edf3_TLink Tff7b72= Te6edf3TypeVarTb4b4b4(Ta5d6ff"Ta5d6ff_TLinkTa5d6ff"Tb4b4b4)
Te6edf3_TIdentity Tff7b72= Te6edf3TypeVarTb4b4b4(Ta5d6ff"Ta5d6ff_TIdentityTa5d6ff"Tb4b4b4)
Tff7b72class T56d364SETypeTb4b4b4(Te6edf3enumTff7b72.Td2a8ffIntEnumTb4b4b4)Tb4b4b4:
Te6edf3SE_LINK_CLOSED Tff7b72= T79c0ff0
Tff7b72class T56d364SessionExceptionTb4b4b4(Tf85149ExceptionTb4b4b4)Tb4b4b4:
Tff7b72def Tff7b72__init__Tb4b4b4(Tff7b72selfTb4b4b4, Te6edf3setypeTb4b4b4: Te6edf3SETypeTb4b4b4, Te6edf3msgTb4b4b4: Tffa657strTb4b4b4, Tff7b72*Te6edf3argsTb4b4b4)Tb4b4b4:
Tffa657superTb4b4b4(Tb4b4b4)Tff7b72.Td2a8ff__init__Tb4b4b4(Te6edf3msgTb4b4b4, Te6edf3argsTb4b4b4)
Tff7b72selfTff7b72.Td2a8fftype Tff7b72= Te6edf3setype
Tff7b72class T56d364LSStateTb4b4b4(Te6edf3enumTff7b72.Td2a8ffIntEnumTb4b4b4)Tb4b4b4:
Te6edf3LSSTATE_WAIT_IDENT Tff7b72= T79c0ff1
Te6edf3LSSTATE_WAIT_VERS Tff7b72= T79c0ff2
Te6edf3LSSTATE_WAIT_CMD Tff7b72= T79c0ff3
Te6edf3LSSTATE_RUNNING Tff7b72= T79c0ff4
Te6edf3LSSTATE_ERROR Tff7b72= T79c0ff5
Te6edf3LSSTATE_TEARDOWN Tff7b72= T79c0ff6
Tff7b72class T56d364LSOutletBaseTb4b4b4(Te6edf3ABCTb4b4b4)Tb4b4b4:
Tf0883e@abstractmethod
Tff7b72def Td2a8ffset_initiator_identified_callbackTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3cbTb4b4b4: Te6edf3CallableTb4b4b4[Tb4b4b4[Te6edf3LSOutletBaseTb4b4b4, Te6edf3_TIdentityTb4b4b4]Tb4b4b4, Tff7b72NoneTb4b4b4]Tb4b4b4)Tb4b4b4: Tff7b72raise Tff7b72NotImplementedTb4b4b4(Tb4b4b4)
Tf0883e@abstractmethod
Tff7b72def Td2a8ffset_link_closed_callbackTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3cbTb4b4b4: Te6edf3CallableTb4b4b4[Tb4b4b4[Te6edf3LSOutletBaseTb4b4b4]Tb4b4b4, Tff7b72NoneTb4b4b4]Tb4b4b4)Tb4b4b4: Tff7b72raise Tff7b72NotImplementedTb4b4b4(Tb4b4b4)
Tf0883e@abstractmethod
Tff7b72def Td2a8ffunset_link_closed_callbackTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4: Tff7b72raise Tff7b72NotImplementedTb4b4b4(Tb4b4b4)
Tf0883e@property
Tf0883e@abstractmethod
Tff7b72def Td2a8ffrttTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4: Tff7b72raise Tff7b72NotImplementedTb4b4b4(Tb4b4b4)
Tf0883e@abstractmethod
Tff7b72def Td2a8ffteardownTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4: Tff7b72raise Tff7b72NotImplementedTb4b4b4(Tb4b4b4)
Tff7b72class T56d364ListenerSessionTb4b4b4:
Te6edf3sessionsTb4b4b4: Te6edf3ListTb4b4b4[Te6edf3ListenerSessionTb4b4b4] Tff7b72= Tb4b4b4[Tb4b4b4]
Te6edf3allowed_identity_hashesTb4b4b4: Tb4b4b4[Tffa657anyTb4b4b4] Tff7b72= Tb4b4b4[Tb4b4b4]
Te6edf3allowed_file_identity_hashesTb4b4b4: Tb4b4b4[Tffa657anyTb4b4b4] Tff7b72= Tb4b4b4[Tb4b4b4]
Te6edf3allow_allTb4b4b4: Tffa657bool Tff7b72= Tff7b72False
Te6edf3allow_remote_commandTb4b4b4: Tffa657bool Tff7b72= Tff7b72False
Te6edf3default_commandTb4b4b4: Tb4b4b4[Tffa657strTb4b4b4] Tff7b72= Tb4b4b4[Tb4b4b4]
Te6edf3remote_cmd_as_args Tff7b72= Tff7b72False
Tff7b72def Tff7b72__init__Tb4b4b4(Tff7b72selfTb4b4b4, Te6edf3outletTb4b4b4: Te6edf3LSOutletBaseTb4b4b4, Te6edf3channelTb4b4b4: Te6edf3RNSTff7b72.Td2a8ffChannelTff7b72.Td2a8ffChannelTb4b4b4, Te6edf3loopTb4b4b4: Te6edf3asyncioTff7b72.Td2a8ffAbstractEventLoopTb4b4b4)Tb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ffSession started for Tffd700{Te6edf3outletTffd700}Ta5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_INFOTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffoutlet Tff7b72= Te6edf3outlet
Tff7b72selfTff7b72.Td2a8ffchannel Tff7b72= Te6edf3channel
Tff7b72selfTff7b72.Td2a8ffoutletTff7b72.Td2a8ffset_initiator_identified_callbackTb4b4b4(Tff7b72selfTff7b72.Td2a8ff_initiator_identifiedTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffoutletTff7b72.Td2a8ffset_link_closed_callbackTb4b4b4(Tff7b72selfTff7b72.Td2a8ff_link_closedTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffloop Tff7b72= Te6edf3loop
Tff7b72selfTff7b72.Td2a8ffstateTb4b4b4: Te6edf3LSState Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffterminated Tff7b72= Tff7b72False
Tff7b72selfTff7b72.Td2a8ffauthenticated Tff7b72= Tff7b72False
Tff7b72selfTff7b72.Td2a8ffremote_identity Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8fftermTb4b4b4: Tffa657str Tff7b72| Tff7b72None Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffstdin_is_pipeTb4b4b4: Tffa657bool Tff7b72= Tff7b72False
Tff7b72selfTff7b72.Td2a8ffstdout_is_pipeTb4b4b4: Tffa657bool Tff7b72= Tff7b72False
Tff7b72selfTff7b72.Td2a8ffstderr_is_pipeTb4b4b4: Tffa657bool Tff7b72= Tff7b72False
Tff7b72selfTff7b72.Td2a8fftcflagsTb4b4b4: Tb4b4b4[Tffa657anyTb4b4b4] Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffcmdlineTb4b4b4: Tb4b4b4[Tffa657strTb4b4b4] Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffrowsTb4b4b4: Tffa657int Tff7b72= T79c0ff0
Tff7b72selfTff7b72.Td2a8ffcolsTb4b4b4: Tffa657int Tff7b72= T79c0ff0
Tff7b72selfTff7b72.Td2a8ffhpixTb4b4b4: Tffa657int Tff7b72= T79c0ff0
Tff7b72selfTff7b72.Td2a8ffvpixTb4b4b4: Tffa657int Tff7b72= T79c0ff0
Tff7b72selfTff7b72.Td2a8ffstdout_buf Tff7b72= Tffa657bytearrayTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffstdout_eof_sent Tff7b72= Tff7b72False
Tff7b72selfTff7b72.Td2a8ffstderr_buf Tff7b72= Tffa657bytearrayTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffstderr_eof_sent Tff7b72= Tff7b72False
Tff7b72selfTff7b72.Td2a8ffreturn_codeTb4b4b4: Tffa657int Tff7b72| Tff7b72None Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffreturn_code_sent Tff7b72= Tff7b72False
Tff7b72selfTff7b72.Td2a8ffprocessTb4b4b4: Te6edf3processTff7b72.Td2a8ffCallbackSubprocess Tff7b72| Tff7b72None Tff7b72= Tff7b72None
Tff7b72if Tff7b72not Tff7b72selfTff7b72.Td2a8ffallow_allTb4b4b4: Tff7b72selfTff7b72.Td2a8ff_set_stateTb4b4b4(Te6edf3LSStateTff7b72.Td2a8ffLSSTATE_WAIT_IDENTTb4b4b4)
Tff7b72elseTb4b4b4:
Tff7b72selfTff7b72.Td2a8ff_set_stateTb4b4b4(Te6edf3LSStateTff7b72.Td2a8ffLSSTATE_WAIT_VERSTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffauthenticated Tff7b72= Tff7b72True
Tff7b72selfTff7b72.Td2a8ffsessionsTff7b72.Td2a8ffappendTb4b4b4(Tff7b72selfTb4b4b4)
Te6edf3protocolTff7b72.Td2a8ffregister_message_typesTb4b4b4(Tff7b72selfTff7b72.Td2a8ffchannelTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffchannelTff7b72.Td2a8ffadd_message_handlerTb4b4b4(Tff7b72selfTff7b72.Td2a8ff_handle_messageTb4b4b4)
Tff7b72def Td2a8ff_terminatedTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3return_codeTb4b4b4: Tffa657intTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffreturn_code Tff7b72= Te6edf3return_code
Tff7b72def Td2a8ff_set_stateTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3stateTb4b4b4: Te6edf3LSStateTb4b4b4, Te6edf3timeout_factorTb4b4b4: Tffa657float Tff7b72= T79c0ff10.0Tb4b4b4)Tb4b4b4:
Te6edf3timeout Tff7b72= Tffa657maxTb4b4b4(Tff7b72selfTff7b72.Td2a8ffoutletTff7b72.Td2a8ffrtt Tff7b72* Te6edf3timeout_factorTb4b4b4, Tffa657maxTb4b4b4(Tff7b72selfTff7b72.Td2a8ffoutletTff7b72.Td2a8ffrtt Tff7b72* T79c0ff2Tb4b4b4, T79c0ff10Tb4b4b4)Tb4b4b4) Tff7b72if Te6edf3timeout_factor Tff7b72is Tff7b72not Tff7b72None Tff7b72else Tff7b72None
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ffSet state: Tffd700{Te6edf3stateTff7b72.Td2a8ffnameTffd700}Ta5d6ff, timeout Tffd700{Te6edf3timeoutTffd700}Ta5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Te6edf3orig_state Tff7b72= Tff7b72selfTff7b72.Td2a8ffstate
Tff7b72selfTff7b72.Td2a8ffstate Tff7b72= Te6edf3state
Tff7b72if Te6edf3timeout_factor Tff7b72is Tff7b72not Tff7b72NoneTb4b4b4:
Tff7b72selfTff7b72.Td2a8ff_callTb4b4b4(Te6edf3functoolsTff7b72.Td2a8ffpartialTb4b4b4(Tff7b72selfTff7b72.Td2a8ff_check_protocol_timeoutTb4b4b4, Tff7b72lambdaTb4b4b4: Tff7b72selfTff7b72.Td2a8ffstate Tff7b72== Te6edf3orig_stateTb4b4b4, Te6edf3stateTff7b72.Td2a8ffnameTb4b4b4)Tb4b4b4, Te6edf3timeoutTb4b4b4)
Tff7b72def Td2a8ff_callTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3funcTb4b4b4: Tffa657callableTb4b4b4, Te6edf3delayTb4b4b4: Tffa657float Tff7b72= T79c0ff0Tb4b4b4)Tb4b4b4:
Tff7b72def Td2a8ffcall_innerTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72if Te6edf3delay Tff7b72== T79c0ff0Tb4b4b4: Te6edf3funcTb4b4b4(Tb4b4b4)
Tff7b72elseTb4b4b4: Tff7b72selfTff7b72.Td2a8ffloopTff7b72.Td2a8ffcall_laterTb4b4b4(Te6edf3delayTb4b4b4, Te6edf3funcTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffloopTff7b72.Td2a8ffcall_soon_threadsafeTb4b4b4(Te6edf3call_innerTb4b4b4)
Tff7b72def Td2a8ffsendTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3messageTb4b4b4: Te6edf3RNSTff7b72.Td2a8ffMessageBaseTb4b4b4)Tb4b4b4: Tff7b72selfTff7b72.Td2a8ffchannelTff7b72.Td2a8ffsendTb4b4b4(Te6edf3messageTb4b4b4)
Tff7b72def Td2a8ff_protocol_errorTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3nameTb4b4b4: Tffa657strTb4b4b4)Tb4b4b4: Tff7b72selfTff7b72.Td2a8ffterminateTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ffProtocol error (Tffd700{Te6edf3nameTffd700}Ta5d6ff)Ta5d6ff"Tb4b4b4)
Tff7b72def Td2a8ff_protocol_timeout_errorTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3nameTb4b4b4: Tffa657strTb4b4b4)Tb4b4b4: Tff7b72selfTff7b72.Td2a8ffterminateTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ffProtocol timeout error: Tffd700{Te6edf3nameTffd700}Ta5d6ff"Tb4b4b4)
Tff7b72def Td2a8ffterminateTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3errorTb4b4b4: Tffa657str Tff7b72= Tff7b72NoneTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffterminated Tff7b72= Tff7b72True
Tff7b72selfTff7b72.Td2a8ffstate Tff7b72= Te6edf3LSStateTff7b72.Td2a8ffLSSTATE_ERROR
Tff7b72with Te6edf3contextlibTff7b72.Td2a8ffsuppressTb4b4b4(Tf85149ExceptionTb4b4b4)Tb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffTerminating sessionTa5d6ff" Tff7b72+ Tb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ff: Tffd700{Te6edf3errorTffd700}Ta5d6ff" Tff7b72if Te6edf3error Tff7b72else Ta5d6ff"Ta5d6ff"Tb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Tff7b72if Te6edf3error Tff7b72and Tff7b72selfTff7b72.Td2a8ffstate Tff7b72!= Te6edf3LSStateTff7b72.Td2a8ffLSSTATE_TEARDOWNTb4b4b4:
Tff7b72with Te6edf3contextlibTff7b72.Td2a8ffsuppressTb4b4b4(Tf85149ExceptionTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffsendTb4b4b4(Te6edf3protocolTff7b72.Td2a8ffErrorMessageTb4b4b4(Te6edf3errorTb4b4b4, Tff7b72TrueTb4b4b4)Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ff_terminate_processTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ff_callTb4b4b4(Tff7b72selfTff7b72.Td2a8ff_pruneTb4b4b4, Tffa657maxTb4b4b4(Tff7b72selfTff7b72.Td2a8ffoutletTff7b72.Td2a8ffrtt Tff7b72* T79c0ff3Tb4b4b4, Te6edf3processTff7b72.Td2a8ffCallbackSubprocessTff7b72.Td2a8ffPROCESS_PIPE_TIMETff7b72+T79c0ff5Tb4b4b4)Tb4b4b4)
Tff7b72def Td2a8ff_pruneTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffstate Tff7b72= Te6edf3LSStateTff7b72.Td2a8ffLSSTATE_TEARDOWN
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffPruning sessionTa5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Tff7b72with Te6edf3contextlibTff7b72.Td2a8ffsuppressTb4b4b4(Tf85149ValueErrorTb4b4b4)Tb4b4b4: Tff7b72selfTff7b72.Td2a8ffsessionsTff7b72.Td2a8ffremoveTb4b4b4(Tff7b72selfTb4b4b4)
Tff7b72with Te6edf3contextlibTff7b72.Td2a8ffsuppressTb4b4b4(Tf85149ExceptionTb4b4b4)Tb4b4b4: Tff7b72selfTff7b72.Td2a8ffoutletTff7b72.Td2a8ffteardownTb4b4b4(Tb4b4b4)
Tff7b72def Td2a8ff_check_protocol_timeoutTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3fail_conditionTb4b4b4: Te6edf3CallableTb4b4b4[Tb4b4b4[Tb4b4b4]Tb4b4b4, Tffa657boolTb4b4b4]Tb4b4b4, Te6edf3nameTb4b4b4: Tffa657strTb4b4b4)Tb4b4b4:
Te6edf3timeout Tff7b72= Tff7b72True
Tff7b72tryTb4b4b4: Te6edf3timeout Tff7b72= Tff7b72selfTff7b72.Td2a8ffstate Tff7b72!= Te6edf3LSStateTff7b72.Td2a8ffLSSTATE_TEARDOWN Tff7b72and Te6edf3fail_conditionTb4b4b4(Tb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4: Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ffError in protocol timeout: Tffd700{Te6edf3eTffd700}Ta5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_ERRORTb4b4b4)
Tff7b72if Te6edf3timeoutTb4b4b4: Tff7b72selfTff7b72.Td2a8ff_protocol_timeout_errorTb4b4b4(Te6edf3nameTb4b4b4)
Tff7b72def Td2a8ff_link_closedTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3outletTb4b4b4: Te6edf3LSOutletBaseTb4b4b4)Tb4b4b4:
Te6edf3outletTff7b72.Td2a8ffunset_link_closed_callbackTb4b4b4(Tb4b4b4)
Tff7b72if Te6edf3outlet Tff7b72!= Tff7b72selfTff7b72.Td2a8ffoutletTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffLink closed received from incorrect outletTa5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Tff7b72return
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6fflink_closed Tffd700{Te6edf3outletTffd700}Ta5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffterminateTb4b4b4(Tb4b4b4)
Tff7b72def Td2a8ff_initiator_identifiedTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3outletTb4b4b4, Te6edf3identityTb4b4b4)Tb4b4b4:
Tff7b72if Te6edf3outlet Tff7b72!= Tff7b72selfTff7b72.Td2a8ffoutletTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffIdentity received from incorrect outletTa5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Tff7b72return
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ffinitiator_identified Tffd700{Te6edf3identityTffd700}Ta5d6ff on link Tffd700{Te6edf3outletTffd700}Ta5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_INFOTb4b4b4)
Tff7b72if Tff7b72selfTff7b72.Td2a8ffstate Tff7b72not Tff7b72in Tb4b4b4[Te6edf3LSStateTff7b72.Td2a8ffLSSTATE_WAIT_IDENTTb4b4b4, Te6edf3LSStateTff7b72.Td2a8ffLSSTATE_WAIT_VERSTb4b4b4]Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ff_protocol_errorTb4b4b4(Te6edf3LSStateTff7b72.Td2a8ffLSSTATE_WAIT_IDENTTff7b72.Td2a8ffnameTb4b4b4)
Tff7b72if Tff7b72selfTff7b72.Td2a8ffallow_all Tff7b72or Te6edf3identityTff7b72.Td2a8ffhash Tff7b72in Tff7b72selfTff7b72.Td2a8ffallowed_identity_hashes Tff7b72or Te6edf3identityTff7b72.Td2a8ffhash Tff7b72in Tff7b72selfTff7b72.Td2a8ffallowed_file_identity_hashesTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffauthenticated Tff7b72= Tff7b72True
Tff7b72selfTff7b72.Td2a8ffremote_identity Tff7b72= Te6edf3identity
Tff7b72selfTff7b72.Td2a8ff_set_stateTb4b4b4(Te6edf3LSStateTff7b72.Td2a8ffLSSTATE_WAIT_VERSTb4b4b4)
Tff7b72elseTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffauthenticated Tff7b72= Tff7b72False
Tff7b72selfTff7b72.Td2a8ffterminateTb4b4b4(Ta5d6ff"Ta5d6ffIdentity not allowedTa5d6ff"Tb4b4b4)
Tf0883e@classmethod
Tff7b72async Tff7b72def Td2a8ffpump_allTb4b4b4(Tff7b72clsTb4b4b4) Tff7b72-Tff7b72> Tff7b72TrueTb4b4b4:
Te6edf3processed_any Tff7b72= Tff7b72False
Tff7b72for Te6edf3session Tff7b72in Tff7b72clsTff7b72.Td2a8ffsessionsTb4b4b4:
Te6edf3processed Tff7b72= Te6edf3sessionTff7b72.Td2a8ffpumpTb4b4b4(Tb4b4b4)
Te6edf3processed_any Tff7b72= Te6edf3processed_any Tff7b72or Te6edf3processed
Tff7b72await Te6edf3asyncioTff7b72.Td2a8ffsleepTb4b4b4(T79c0ff0Tb4b4b4)
Tf0883e@classmethod
Tff7b72async Tff7b72def Td2a8ffterminate_allTb4b4b4(Tff7b72clsTb4b4b4, Te6edf3reasonTb4b4b4: Tffa657strTb4b4b4)Tb4b4b4:
Tff7b72for Te6edf3session Tff7b72in Tff7b72clsTff7b72.Td2a8ffsessionsTb4b4b4:
Te6edf3sessionTff7b72.Td2a8ffterminateTb4b4b4(Te6edf3reasonTb4b4b4)
Tff7b72await Te6edf3asyncioTff7b72.Td2a8ffsleepTb4b4b4(T79c0ff0Tb4b4b4)
Tff7b72def Td2a8ffpumpTb4b4b4(Tff7b72selfTb4b4b4) Tff7b72-Tff7b72> Tffa657boolTb4b4b4:
Tff7b72def Td2a8ffcompress_adaptiveTb4b4b4(Te6edf3bufTb4b4b4: Tffa657bytesTb4b4b4)Tb4b4b4:
Te6edf3comp_tries Tff7b72= Te6edf3RNSTff7b72.Td2a8ffRawChannelWriterTff7b72.Td2a8ffCOMPRESSION_TRIES
Te6edf3comp_try Tff7b72= T79c0ff1
Te6edf3comp_success Tff7b72= Tff7b72False
Te6edf3chunk_len Tff7b72= Tffa657lenTb4b4b4(Te6edf3bufTb4b4b4)
Tff7b72if Te6edf3chunk_len Tff7b72> Te6edf3RNSTff7b72.Td2a8ffRawChannelWriterTff7b72.Td2a8ffMAX_CHUNK_LENTb4b4b4:
Te6edf3chunk_len Tff7b72= Te6edf3RNSTff7b72.Td2a8ffRawChannelWriterTff7b72.Td2a8ffMAX_CHUNK_LEN
Te6edf3chunk_segment Tff7b72= Tff7b72None
Te6edf3chunk_segment Tff7b72= Tff7b72None
Te6edf3max_data_len Tff7b72= Tff7b72selfTff7b72.Td2a8ffchannelTff7b72.Td2a8ffmdu Tff7b72- Te6edf3protocolTff7b72.Td2a8ffStreamDataMessageTff7b72.Td2a8ffOVERHEAD
Tff7b72while Te6edf3chunk_len Tff7b72> T79c0ff32 Tff7b72and Te6edf3comp_try Tff7b72< Te6edf3comp_triesTb4b4b4:
Te6edf3chunk_segment_length Tff7b72= Tffa657intTb4b4b4(Te6edf3chunk_lenTff7b72/Te6edf3comp_tryTb4b4b4)
Te6edf3compressed_chunk Tff7b72= Te6edf3bz2Tff7b72.Td2a8ffcompressTb4b4b4(Te6edf3bufTb4b4b4[Tb4b4b4:Te6edf3chunk_segment_lengthTb4b4b4]Tb4b4b4)
Te6edf3compressed_length Tff7b72= Tffa657lenTb4b4b4(Te6edf3compressed_chunkTb4b4b4)
Tff7b72if Te6edf3compressed_length Tff7b72< Te6edf3max_data_len Tff7b72and Te6edf3compressed_length Tff7b72< Te6edf3chunk_segment_lengthTb4b4b4:
Te6edf3comp_success Tff7b72= Tff7b72True
Tff7b72break
Tff7b72elseTb4b4b4: Te6edf3comp_try Tff7b72+Tff7b72= T79c0ff1
Tff7b72if Te6edf3comp_successTb4b4b4:
Te6edf3diff Tff7b72= Te6edf3max_data_len Tff7b72- Tffa657lenTb4b4b4(Te6edf3compressed_chunkTb4b4b4)
Te6edf3chunk Tff7b72= Te6edf3compressed_chunk
Te6edf3processed_length Tff7b72= Te6edf3chunk_segment_length
Tff7b72elseTb4b4b4:
Te6edf3chunk Tff7b72= Tffa657bytesTb4b4b4(Te6edf3bufTb4b4b4[Tb4b4b4:Te6edf3max_data_lenTb4b4b4]Tb4b4b4)
Te6edf3processed_length Tff7b72= Tffa657lenTb4b4b4(Te6edf3chunkTb4b4b4)
Tff7b72return Te6edf3comp_successTb4b4b4, Te6edf3processed_lengthTb4b4b4, Te6edf3chunk
Tff7b72tryTb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffstate Tff7b72!= Te6edf3LSStateTff7b72.Td2a8ffLSSTATE_RUNNINGTb4b4b4: Tff7b72return Tff7b72False
Tff7b72elif Tff7b72not Tff7b72selfTff7b72.Td2a8ffchannelTff7b72.Td2a8ffis_ready_to_sendTb4b4b4(Tb4b4b4)Tb4b4b4: Tff7b72return Tff7b72False
Tff7b72elif Tffa657lenTb4b4b4(Tff7b72selfTff7b72.Td2a8ffstderr_bufTb4b4b4) Tff7b72> T79c0ff0Tb4b4b4:
Te6edf3comp_successTb4b4b4, Te6edf3processed_lengthTb4b4b4, Te6edf3data Tff7b72= Te6edf3compress_adaptiveTb4b4b4(Tff7b72selfTff7b72.Td2a8ffstderr_bufTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffstderr_buf Tff7b72= Tff7b72selfTff7b72.Td2a8ffstderr_bufTb4b4b4[Te6edf3processed_lengthTb4b4b4:Tb4b4b4]
Te6edf3send_eof Tff7b72= Tff7b72selfTff7b72.Td2a8ffprocessTff7b72.Td2a8ffstderr_eof Tff7b72and Tffa657lenTb4b4b4(Te6edf3dataTb4b4b4) Tff7b72== T79c0ff0 Tff7b72and Tff7b72not Tff7b72selfTff7b72.Td2a8ffstderr_eof_sent
Tff7b72selfTff7b72.Td2a8ffstderr_eof_sent Tff7b72= Tff7b72selfTff7b72.Td2a8ffstderr_eof_sent Tff7b72or Te6edf3send_eof
Te6edf3msg Tff7b72= Te6edf3protocolTff7b72.Td2a8ffStreamDataMessageTb4b4b4(Te6edf3protocolTff7b72.Td2a8ffStreamDataMessageTff7b72.Td2a8ffSTREAM_ID_STDERRTb4b4b4,
Te6edf3dataTb4b4b4, Te6edf3send_eofTb4b4b4, Te6edf3comp_successTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffsendTb4b4b4(Te6edf3msgTb4b4b4)
Tff7b72if Te6edf3send_eofTb4b4b4: Tff7b72selfTff7b72.Td2a8ffstderr_eof_sent Tff7b72= Tff7b72True
Tff7b72return Tff7b72True
Tff7b72elif Tffa657lenTb4b4b4(Tff7b72selfTff7b72.Td2a8ffstdout_bufTb4b4b4) Tff7b72> T79c0ff0Tb4b4b4:
Te6edf3comp_successTb4b4b4, Te6edf3processed_lengthTb4b4b4, Te6edf3data Tff7b72= Te6edf3compress_adaptiveTb4b4b4(Tff7b72selfTff7b72.Td2a8ffstdout_bufTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffstdout_buf Tff7b72= Tff7b72selfTff7b72.Td2a8ffstdout_bufTb4b4b4[Te6edf3processed_lengthTb4b4b4:Tb4b4b4]
Te6edf3send_eof Tff7b72= Tff7b72selfTff7b72.Td2a8ffprocessTff7b72.Td2a8ffstdout_eof Tff7b72and Tffa657lenTb4b4b4(Te6edf3dataTb4b4b4) Tff7b72== T79c0ff0 Tff7b72and Tff7b72not Tff7b72selfTff7b72.Td2a8ffstdout_eof_sent
Tff7b72selfTff7b72.Td2a8ffstdout_eof_sent Tff7b72= Tff7b72selfTff7b72.Td2a8ffstdout_eof_sent Tff7b72or Te6edf3send_eof
Te6edf3msg Tff7b72= Te6edf3protocolTff7b72.Td2a8ffStreamDataMessageTb4b4b4(Te6edf3protocolTff7b72.Td2a8ffStreamDataMessageTff7b72.Td2a8ffSTREAM_ID_STDOUTTb4b4b4,
Te6edf3dataTb4b4b4, Te6edf3send_eofTb4b4b4, Te6edf3comp_successTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffsendTb4b4b4(Te6edf3msgTb4b4b4)
Tff7b72if Te6edf3send_eofTb4b4b4: Tff7b72selfTff7b72.Td2a8ffstdout_eof_sent Tff7b72= Tff7b72True
Tff7b72return Tff7b72True
Tff7b72elif Tff7b72selfTff7b72.Td2a8ffreturn_code Tff7b72is Tff7b72not Tff7b72None Tff7b72and Tff7b72not Tff7b72selfTff7b72.Td2a8ffreturn_code_sentTb4b4b4:
Te6edf3msg Tff7b72= Te6edf3protocolTff7b72.Td2a8ffCommandExitedMessageTb4b4b4(Tff7b72selfTff7b72.Td2a8ffreturn_codeTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffsendTb4b4b4(Te6edf3msgTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffreturn_code_sent Tff7b72= Tff7b72True
Tff7b72selfTff7b72.Td2a8ff_callTb4b4b4(Te6edf3functoolsTff7b72.Td2a8ffpartialTb4b4b4(Tff7b72selfTff7b72.Td2a8ff_check_protocol_timeoutTb4b4b4,
Tff7b72lambdaTb4b4b4: Tff7b72selfTff7b72.Td2a8ffstate Tff7b72== Te6edf3LSStateTff7b72.Td2a8ffLSSTATE_RUNNINGTb4b4b4, Ta5d6ff"Ta5d6ffCommandExitedMessageTa5d6ff"Tb4b4b4)Tb4b4b4,
Tffa657maxTb4b4b4(Tff7b72selfTff7b72.Td2a8ffoutletTff7b72.Td2a8ffrtt Tff7b72* T79c0ff5Tb4b4b4, T79c0ff10Tb4b4b4)Tb4b4b4)
Tff7b72return Tff7b72False
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4: Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ffError during pump: Tffd700{Te6edf3eTffd700}Ta5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_ERRORTb4b4b4)
Tff7b72return Tff7b72False
Tff7b72def Td2a8ff_terminate_processTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72with Te6edf3contextlibTff7b72.Td2a8ffsuppressTb4b4b4(Tf85149ExceptionTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffprocess Tff7b72and Tff7b72selfTff7b72.Td2a8ffprocessTff7b72.Td2a8ffrunningTb4b4b4: Tff7b72selfTff7b72.Td2a8ffprocessTff7b72.Td2a8ffterminateTb4b4b4(Tb4b4b4)
Tff7b72def Td2a8ff_start_cmdTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3cmdlineTb4b4b4: Tb4b4b4[Tffa657strTb4b4b4]Tb4b4b4, Te6edf3pipe_stdinTb4b4b4: Tffa657boolTb4b4b4, Te6edf3pipe_stdoutTb4b4b4: Tffa657boolTb4b4b4, Te6edf3pipe_stderrTb4b4b4: Tffa657boolTb4b4b4, Te6edf3tcflagsTb4b4b4: Tb4b4b4[Tffa657anyTb4b4b4]Tb4b4b4,
Te6edf3termTb4b4b4: Tffa657str Tff7b72| Tff7b72NoneTb4b4b4, Te6edf3rowsTb4b4b4: Tffa657intTb4b4b4, Te6edf3colsTb4b4b4: Tffa657intTb4b4b4, Te6edf3hpixTb4b4b4: Tffa657intTb4b4b4, Te6edf3vpixTb4b4b4: Tffa657intTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffterminatedTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ffAttempt to start command on terminated session: Tffd700{Te6edf3cmdlineTffd700}Ta5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_WARNINGTb4b4b4)
Tff7b72return
Tff7b72if Tff7b72not Tff7b72selfTff7b72.Td2a8ffauthenticatedTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ffAttempt to start command on unauthenticated session: Tffd700{Te6edf3cmdlineTffd700}Ta5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_WARNINGTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffterminateTb4b4b4(Ta5d6ff"Ta5d6ffInvalid stateTa5d6ff"Tb4b4b4)
Tff7b72return
Tff7b72if Tff7b72selfTff7b72.Td2a8ffstate Tff7b72!= Te6edf3LSStateTff7b72.Td2a8ffLSSTATE_RUNNINGTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ffAttempt to start command on session not in running state: Tffd700{Te6edf3cmdlineTffd700}Ta5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_WARNINGTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffterminateTb4b4b4(Ta5d6ff"Ta5d6ffInvalid stateTa5d6ff"Tb4b4b4)
Tff7b72return
Tff7b72selfTff7b72.Td2a8ffcmdline Tff7b72= Tff7b72selfTff7b72.Td2a8ffdefault_command
Tff7b72if Tff7b72not Tff7b72selfTff7b72.Td2a8ffallow_remote_command Tff7b72and Te6edf3cmdline Tff7b72and Tffa657lenTb4b4b4(Te6edf3cmdlineTb4b4b4) Tff7b72> T79c0ff0Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffterminateTb4b4b4(Ta5d6ff"Ta5d6ffRemote command line not allowed by listenerTa5d6ff"Tb4b4b4)
Tff7b72return
Tff7b72if Tff7b72selfTff7b72.Td2a8ffremote_cmd_as_args Tff7b72and Te6edf3cmdline Tff7b72and Tffa657lenTb4b4b4(Te6edf3cmdlineTb4b4b4) Tff7b72> T79c0ff0Tb4b4b4: Tff7b72selfTff7b72.Td2a8ffcmdlineTff7b72.Td2a8ffextendTb4b4b4(Te6edf3cmdlineTb4b4b4)
Tff7b72elif Te6edf3cmdline Tff7b72and Tffa657lenTb4b4b4(Te6edf3cmdlineTb4b4b4) Tff7b72> T79c0ff0Tb4b4b4: Tff7b72selfTff7b72.Td2a8ffcmdline Tff7b72= Te6edf3cmdline
Tff7b72selfTff7b72.Td2a8ffstdin_is_pipe Tff7b72= Te6edf3pipe_stdin
Tff7b72selfTff7b72.Td2a8ffstdout_is_pipe Tff7b72= Te6edf3pipe_stdout
Tff7b72selfTff7b72.Td2a8ffstderr_is_pipe Tff7b72= Te6edf3pipe_stderr
Tff7b72selfTff7b72.Td2a8fftcflags Tff7b72= Te6edf3tcflags
Tff7b72selfTff7b72.Td2a8ffterm Tff7b72= Te6edf3term
Tff7b72def Td2a8ffstdoutTb4b4b4(Te6edf3dataTb4b4b4: Tffa657bytesTb4b4b4)Tb4b4b4: Tff7b72selfTff7b72.Td2a8ffstdout_bufTff7b72.Td2a8ffextendTb4b4b4(Te6edf3dataTb4b4b4)
Tff7b72def Td2a8ffstderrTb4b4b4(Te6edf3dataTb4b4b4: Tffa657bytesTb4b4b4)Tb4b4b4: Tff7b72selfTff7b72.Td2a8ffstderr_bufTff7b72.Td2a8ffextendTb4b4b4(Te6edf3dataTb4b4b4)
Tff7b72tryTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffprocess Tff7b72= Te6edf3processTff7b72.Td2a8ffCallbackSubprocessTb4b4b4(Te6edf3argvTff7b72=Tff7b72selfTff7b72.Td2a8ffcmdlineTb4b4b4,
Te6edf3envTff7b72=Tb4b4b4{Ta5d6ff"Ta5d6ffTERMTa5d6ff"Tb4b4b4: Tff7b72selfTff7b72.Td2a8ffterm Tff7b72or Te6edf3osTff7b72.Td2a8ffenvironTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffTERMTa5d6ff"Tb4b4b4) Tff7b72or Ta5d6ff"Ta5d6ffxtermTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffRNS_REMOTE_IDENTITYTa5d6ff"Tb4b4b4: Tb4b4b4(Te6edf3RNSTff7b72.Td2a8ffprettyhexrepTb4b4b4(Tff7b72selfTff7b72.Td2a8ffremote_identityTff7b72.Td2a8ffhashTb4b4b4)
Tff7b72if Tff7b72selfTff7b72.Td2a8ffremote_identity Tff7b72and Tff7b72selfTff7b72.Td2a8ffremote_identityTff7b72.Td2a8ffhash Tff7b72else Ta5d6ff"Ta5d6ff"Tb4b4b4)Tb4b4b4}Tb4b4b4,
Te6edf3loopTff7b72=Tff7b72selfTff7b72.Td2a8ffloopTb4b4b4,
Te6edf3stdout_callbackTff7b72=Te6edf3stdoutTb4b4b4,
Te6edf3stderr_callbackTff7b72=Te6edf3stderrTb4b4b4,
Te6edf3terminated_callbackTff7b72=Tff7b72selfTff7b72.Td2a8ff_terminatedTb4b4b4,
Te6edf3stdin_is_pipeTff7b72=Tff7b72selfTff7b72.Td2a8ffstdin_is_pipeTb4b4b4,
Te6edf3stdout_is_pipeTff7b72=Tff7b72selfTff7b72.Td2a8ffstdout_is_pipeTb4b4b4,
Te6edf3stderr_is_pipeTff7b72=Tff7b72selfTff7b72.Td2a8ffstderr_is_pipeTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffprocessTff7b72.Td2a8ffstartTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ff_set_window_sizeTb4b4b4(Te6edf3rowsTb4b4b4, Te6edf3colsTb4b4b4, Te6edf3hpixTb4b4b4, Te6edf3vpixTb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ffUnable to start process for link Tffd700{Tff7b72selfTff7b72.Td2a8ffoutletTffd700}Ta5d6ff: Tffd700{Te6edf3eTffd700}Ta5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_ERRORTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffterminateTb4b4b4(Ta5d6ff"Ta5d6ffUnable to start processTa5d6ff"Tb4b4b4)
Tff7b72def Td2a8ff_set_window_sizeTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3rowsTb4b4b4: Tffa657intTb4b4b4, Te6edf3colsTb4b4b4: Tffa657intTb4b4b4, Te6edf3hpixTb4b4b4: Tffa657intTb4b4b4, Te6edf3vpixTb4b4b4: Tffa657intTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffrows Tff7b72= Te6edf3rows
Tff7b72selfTff7b72.Td2a8ffcols Tff7b72= Te6edf3cols
Tff7b72selfTff7b72.Td2a8ffhpix Tff7b72= Te6edf3hpix
Tff7b72selfTff7b72.Td2a8ffvpix Tff7b72= Te6edf3vpix
Tff7b72with Te6edf3contextlibTff7b72.Td2a8ffsuppressTb4b4b4(Tf85149ExceptionTb4b4b4)Tb4b4b4: Tff7b72selfTff7b72.Td2a8ffprocessTff7b72.Td2a8ffset_winsizeTb4b4b4(Te6edf3rowsTb4b4b4, Te6edf3colsTb4b4b4, Te6edf3hpixTb4b4b4, Te6edf3vpixTb4b4b4)
Tff7b72def Td2a8ff_received_stdinTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3dataTb4b4b4: Tffa657bytesTb4b4b4, Te6edf3eofTb4b4b4: Tffa657boolTb4b4b4)Tb4b4b4:
Tff7b72if Te6edf3data Tff7b72and Tffa657lenTb4b4b4(Te6edf3dataTb4b4b4) Tff7b72> T79c0ff0Tb4b4b4: Tff7b72selfTff7b72.Td2a8ffprocessTff7b72.Td2a8ffwriteTb4b4b4(Te6edf3dataTb4b4b4)
Tff7b72if Te6edf3eofTb4b4b4: Tff7b72selfTff7b72.Td2a8ffprocessTff7b72.Td2a8ffclose_stdinTb4b4b4(Tb4b4b4)
Tff7b72def Td2a8ff_handle_messageTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3messageTb4b4b4: Te6edf3RNSTff7b72.Td2a8ffMessageBaseTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffterminatedTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ffReceived packet, but session was terminatedTa5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_ERRORTb4b4b4)
Tff7b72return
Tff7b72if Tff7b72selfTff7b72.Td2a8ffstate Tff7b72> Te6edf3LSStateTff7b72.Td2a8ffLSSTATE_RUNNINGTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ffReceived packet, but in state Tffd700{Tff7b72selfTff7b72.Td2a8ffstateTff7b72.Td2a8ffnameTffd700}Ta5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_ERRORTb4b4b4)
Tff7b72return
Tff7b72if Tff7b72selfTff7b72.Td2a8ffstate Tff7b72== Te6edf3LSStateTff7b72.Td2a8ffLSSTATE_WAIT_IDENTTb4b4b4:
T8b949e# Ignore any messages until the initiator has identified to avoid race conditions
T8b949e# between identity announcement and early protocol messages.
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffIgnoring message while waiting for identificationTa5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Tff7b72return
Tff7b72elif Tff7b72selfTff7b72.Td2a8ffstate Tff7b72== Te6edf3LSStateTff7b72.Td2a8ffLSSTATE_WAIT_VERSTb4b4b4:
Tff7b72if Tff7b72not Tff7b72selfTff7b72.Td2a8ffauthenticatedTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffterminateTb4b4b4(Ta5d6ff"Ta5d6ffInvalid stateTa5d6ff"Tb4b4b4)
Tff7b72return
Tff7b72if Tff7b72not Tffa657isinstanceTb4b4b4(Te6edf3messageTb4b4b4, Te6edf3protocolTff7b72.Td2a8ffVersionInfoMessageTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ff_protocol_errorTb4b4b4(Tff7b72selfTff7b72.Td2a8ffstateTff7b72.Td2a8ffnameTb4b4b4)
Tff7b72return
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ffVersion Tffd700{Te6edf3messageTff7b72.Td2a8ffsw_versionTffd700}Ta5d6ff, protocol Tffd700{Te6edf3messageTff7b72.Td2a8ffprotocol_versionTffd700}Ta5d6ff on link Tffd700{Tff7b72selfTff7b72.Td2a8ffoutletTffd700}Ta5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_VERBOSETb4b4b4)
Tff7b72if Te6edf3messageTff7b72.Td2a8ffprotocol_version Tff7b72!= Te6edf3protocolTff7b72.Td2a8ffPROTOCOL_VERSIONTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffterminateTb4b4b4(Ta5d6ff"Ta5d6ffIncompatible protocolTa5d6ff"Tb4b4b4)
Tff7b72return
Tff7b72selfTff7b72.Td2a8ffsendTb4b4b4(Te6edf3protocolTff7b72.Td2a8ffVersionInfoMessageTb4b4b4(Tb4b4b4)Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ff_set_stateTb4b4b4(Te6edf3LSStateTff7b72.Td2a8ffLSSTATE_WAIT_CMDTb4b4b4)
Tff7b72return
Tff7b72elif Tff7b72selfTff7b72.Td2a8ffstate Tff7b72== Te6edf3LSStateTff7b72.Td2a8ffLSSTATE_WAIT_CMDTb4b4b4:
Tff7b72if Tff7b72not Tff7b72selfTff7b72.Td2a8ffauthenticatedTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffterminateTb4b4b4(Ta5d6ff"Ta5d6ffInvalid stateTa5d6ff"Tb4b4b4)
Tff7b72return
Tff7b72if Tff7b72not Tffa657isinstanceTb4b4b4(Te6edf3messageTb4b4b4, Te6edf3protocolTff7b72.Td2a8ffExecuteCommandMesssageTb4b4b4)Tb4b4b4:
Tff7b72return Tff7b72selfTff7b72.Td2a8ff_protocol_errorTb4b4b4(Tff7b72selfTff7b72.Td2a8ffstateTff7b72.Td2a8ffnameTb4b4b4)
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ffExecute command message on link Tffd700{Tff7b72selfTff7b72.Td2a8ffoutletTffd700}Ta5d6ff: Tffd700{Te6edf3messageTff7b72.Td2a8ffcmdlineTffd700}Ta5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_VERBOSETb4b4b4)
Tff7b72selfTff7b72.Td2a8ff_set_stateTb4b4b4(Te6edf3LSStateTff7b72.Td2a8ffLSSTATE_RUNNINGTb4b4b4)
Tff7b72selfTff7b72.Td2a8ff_start_cmdTb4b4b4(Te6edf3messageTff7b72.Td2a8ffcmdlineTb4b4b4, Te6edf3messageTff7b72.Td2a8ffpipe_stdinTb4b4b4, Te6edf3messageTff7b72.Td2a8ffpipe_stdoutTb4b4b4, Te6edf3messageTff7b72.Td2a8ffpipe_stderrTb4b4b4,
Te6edf3messageTff7b72.Td2a8fftcflagsTb4b4b4, Te6edf3messageTff7b72.Td2a8fftermTb4b4b4, Te6edf3messageTff7b72.Td2a8ffrowsTb4b4b4, Te6edf3messageTff7b72.Td2a8ffcolsTb4b4b4, Te6edf3messageTff7b72.Td2a8ffhpixTb4b4b4, Te6edf3messageTff7b72.Td2a8ffvpixTb4b4b4)
Tff7b72return
Tff7b72elif Tff7b72selfTff7b72.Td2a8ffstate Tff7b72== Te6edf3LSStateTff7b72.Td2a8ffLSSTATE_RUNNINGTb4b4b4:
Tff7b72if Tff7b72not Tff7b72selfTff7b72.Td2a8ffauthenticatedTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffterminateTb4b4b4(Ta5d6ff"Ta5d6ffInvalid stateTa5d6ff"Tb4b4b4)
Tff7b72return
Tff7b72if Tffa657isinstanceTb4b4b4(Te6edf3messageTb4b4b4, Te6edf3protocolTff7b72.Td2a8ffWindowSizeMessageTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ff_set_window_sizeTb4b4b4(Te6edf3messageTff7b72.Td2a8ffrowsTb4b4b4, Te6edf3messageTff7b72.Td2a8ffcolsTb4b4b4, Te6edf3messageTff7b72.Td2a8ffhpixTb4b4b4, Te6edf3messageTff7b72.Td2a8ffvpixTb4b4b4)
Tff7b72elif Tffa657isinstanceTb4b4b4(Te6edf3messageTb4b4b4, Te6edf3protocolTff7b72.Td2a8ffStreamDataMessageTb4b4b4)Tb4b4b4:
Tff7b72if Te6edf3messageTff7b72.Td2a8ffstream_id Tff7b72!= Te6edf3protocolTff7b72.Td2a8ffStreamDataMessageTff7b72.Td2a8ffSTREAM_ID_STDINTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ffReceived stream data for invalid stream Tffd700{Te6edf3messageTff7b72.Td2a8ffstream_idTffd700}Ta5d6ff on link Tffd700{Tff7b72selfTff7b72.Td2a8ffoutletTffd700}Ta5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_ERRORTb4b4b4)
Tff7b72return Tff7b72selfTff7b72.Td2a8ff_protocol_errorTb4b4b4(Tff7b72selfTff7b72.Td2a8ffstateTff7b72.Td2a8ffnameTb4b4b4)
Tff7b72selfTff7b72.Td2a8ff_received_stdinTb4b4b4(Te6edf3messageTff7b72.Td2a8ffdataTb4b4b4, Te6edf3messageTff7b72.Td2a8ffeofTb4b4b4)
Tff7b72return
Tff7b72elif Tffa657isinstanceTb4b4b4(Te6edf3messageTb4b4b4, Te6edf3protocolTff7b72.Td2a8ffNoopMessageTb4b4b4)Tb4b4b4:
T8b949e# echo noop only on listener--used for keepalive/connectivity check
Tff7b72selfTff7b72.Td2a8ffsendTb4b4b4(Te6edf3messageTb4b4b4)
Tff7b72return
Tff7b72elseTb4b4b4:
Tff7b72selfTff7b72.Td2a8ff_protocol_errorTb4b4b4(Ta5d6ff"Ta5d6ffunexpected messageTa5d6ff"Tb4b4b4)
Tff7b72return
Tff7b72class T56d364RNSOutletTb4b4b4(Te6edf3LSOutletBaseTb4b4b4)Tb4b4b4:
Tff7b72def Td2a8ffset_initiator_identified_callbackTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3cbTb4b4b4: Te6edf3CallableTb4b4b4[Tb4b4b4[Te6edf3LSOutletBaseTb4b4b4, Te6edf3_TIdentityTb4b4b4]Tb4b4b4, Tff7b72NoneTb4b4b4]Tb4b4b4)Tb4b4b4:
Tff7b72def Td2a8ffinner_cbTb4b4b4(Te6edf3linkTb4b4b4, Te6edf3identityTb4b4b4: Te6edf3_TIdentityTb4b4b4)Tb4b4b4: Te6edf3cbTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3identityTb4b4b4)
Tff7b72selfTff7b72.Td2a8fflinkTff7b72.Td2a8ffset_remote_identified_callbackTb4b4b4(Te6edf3inner_cbTb4b4b4)
Tff7b72def Td2a8ffset_link_closed_callbackTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3cbTb4b4b4: Te6edf3CallableTb4b4b4[Tb4b4b4[Te6edf3LSOutletBaseTb4b4b4]Tb4b4b4, Tff7b72NoneTb4b4b4]Tb4b4b4)Tb4b4b4:
Tff7b72def Td2a8ffinner_cbTb4b4b4(Te6edf3linkTb4b4b4)Tb4b4b4: Te6edf3cbTb4b4b4(Tff7b72selfTb4b4b4)
Tff7b72selfTff7b72.Td2a8fflinkTff7b72.Td2a8ffset_link_closed_callbackTb4b4b4(Te6edf3inner_cbTb4b4b4)
Tff7b72def Td2a8ffunset_link_closed_callbackTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4: Tff7b72selfTff7b72.Td2a8fflinkTff7b72.Td2a8ffset_link_closed_callbackTb4b4b4(Tff7b72NoneTb4b4b4)
Tff7b72def Td2a8ffteardownTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4: Tff7b72selfTff7b72.Td2a8fflinkTff7b72.Td2a8ffteardownTb4b4b4(Tb4b4b4)
Tf0883e@property
Tff7b72def Td2a8ffrttTb4b4b4(Tff7b72selfTb4b4b4) Tff7b72-Tff7b72> Tffa657floatTb4b4b4: Tff7b72return Tff7b72selfTff7b72.Td2a8fflinkTff7b72.Td2a8ffrtt
Tff7b72def Tff7b72__str__Tb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4: Tff7b72return Ta5d6fffTa5d6ff"Ta5d6ffOutlet on Tffd700{Tff7b72selfTff7b72.Td2a8fflinkTffd700}Ta5d6ff"
Tff7b72def Tff7b72__init__Tb4b4b4(Tff7b72selfTb4b4b4, Te6edf3linkTb4b4b4: Te6edf3RNSTff7b72.Td2a8ffLinkTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8fflink Tff7b72= Te6edf3link
Te6edf3linkTff7b72.Td2a8fflsoutlet Tff7b72= Tff7b72self
Tf0883e@staticmethod
Tff7b72def Td2a8ffget_outletTb4b4b4(Te6edf3linkTb4b4b4: Te6edf3RNSTff7b72.Td2a8ffLinkTb4b4b4)Tb4b4b4:
Tff7b72if Tffa657hasattrTb4b4b4(Te6edf3linkTb4b4b4, Ta5d6ff"Ta5d6fflsoutletTa5d6ff"Tb4b4b4)Tb4b4b4: Tff7b72return Te6edf3linkTff7b72.Td2a8fflsoutlet
Tff7b72return Te6edf3RNSOutletTb4b4b4(Te6edf3linkTb4b4b4)
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────